"""
    在不修改原来函数代码的情况下增加额外的功能就可以使用装饰器进行完成操作
    为需要被装饰的函数添加新的功能或者显示条件以及帮助输出等
    核心：在不修改原来函数的代码情况下，给原来的函数添加性能或者限制条件
"""

"""
    装饰器本身就是一个函数
    装饰器的返回值一定是一个函数的引用
    装饰器有且只有一个固定的形参
    装饰器的固定一个形参用来接收被装饰的哪个函数
    装饰器的本质就是闭包
    内部函数使用外部函数的变量,即调用传递过来的函数
    外部函数返回内部函数的引用
"""


# 用户进行账号的注册
# 原来函数定义的功能没有对账号进行验证，现在需要增加额外的功能验证账号长度符合6-12位字符
# 定义一个装饰器来完成账号长度的验证
def check(func):  # func接收被装饰的函数引用:func = username
    def inner():
        print("现在开始验证账号长度")
        func()  # func() = username()

    return inner


def username():

    print(f"您输入的账号为:qwertyu")


username = check(username)  # 16----4----9----16 username = inner
username()  # username() = inner() 17---5--6---7---12---13---7
